Imports System.Data.SqlClient

Public Class cls_registro_

    Implements ICloneable

#Region "Variables ..."
    Private int_idregistro As Integer = 0
    Private dte_fechacreado As DateTime = New System.DateTime(Now.Year, 1, 1)
    Private int_idusuariocreado As Integer = 0
    Private dte_fechamodificado As DateTime = New System.DateTime(Now.Year, 1, 1)
    Private int_idusuariomodificado As Integer = 0
    Private dte_fecharegistroestado As DateTime = New System.DateTime(Now.Year, 1, 1)
    Private int_idregistroestado As Integer = 0
    Private str_observaciones As String = ""
    Private int_idusuarioregistroestado As Integer = 0

    Private obj_usuariocreado As cls_usuario_ = Nothing
    Private obj_usuariomodificado As cls_usuario_ = Nothing
    Private obj_usuarioregistroestado As cls_usuario_ = Nothing

    Private obj_registroestado As cls_registroestado_ = Nothing

    Private col_Items As Collections.Generic.List(Of cls_registro_) = Nothing
#End Region

#Region "Propiedades ..."
    ReadOnly Property This
        Get
            Return Me
        End Get
    End Property
    ReadOnly Property ThisDescripcion As String
        Get
            Return Me.ToString
        End Get
    End Property
    ReadOnly Property pKey
        Get
            Return idregistro
        End Get
    End Property
    Property idregistro() As Integer
        Get
            idregistro = int_idregistro
        End Get
        Set(ByVal value As Integer)
            int_idregistro = value
        End Set
    End Property
    Property fechacreado() As DateTime
        Get
            fechacreado = dte_fechacreado
        End Get
        Set(ByVal value As DateTime)
            dte_fechacreado = value
        End Set
    End Property
    Property idusuariocreado() As Integer
        Get
            idusuariocreado = int_idusuariocreado
        End Get
        Set(ByVal value As Integer)
            int_idusuariocreado = value
        End Set
    End Property
    Property fechamodificado() As DateTime
        Get
            fechamodificado = dte_fechamodificado
        End Get
        Set(ByVal value As DateTime)
            dte_fechamodificado = value
        End Set
    End Property
    Property idusuariomodificado() As Integer
        Get
            idusuariomodificado = int_idusuariomodificado
        End Get
        Set(ByVal value As Integer)
            int_idusuariomodificado = value
        End Set
    End Property
    Property fecharegistroestado() As DateTime
        Get
            fecharegistroestado = dte_fecharegistroestado
        End Get
        Set(ByVal value As DateTime)
            dte_fecharegistroestado = value
        End Set
    End Property
    Property idregistroestado() As Integer
        Get
            idregistroestado = int_idregistroestado
        End Get
        Set(ByVal value As Integer)
            int_idregistroestado = value
        End Set
    End Property

    Property observaciones() As String
        Get
            observaciones = str_observaciones
        End Get
        Set(ByVal value As String)
            str_observaciones = value
        End Set
    End Property

    Property idusuarioregistroestado() As Integer
        Get
            idusuarioregistroestado = int_idusuarioregistroestado
        End Get
        Set(ByVal value As Integer)
            int_idusuarioregistroestado = value
        End Set
    End Property

    Property usuariocreado() As cls_usuario_
        Get
            If IsNothing(obj_usuariocreado) Then
                obj_usuariocreado = New cls_usuario_
                If Not obj_usuariocreado.Buscar(idusuariocreado) Then
                    obj_usuariocreado = Nothing
                End If
            End If
            usuariocreado = obj_usuariocreado
        End Get
        Set(ByVal value As cls_usuario_)
            obj_usuariocreado = value
        End Set
    End Property

    Property usuariomodificado() As cls_usuario_
        Get
            If IsNothing(obj_usuariomodificado) Then
                obj_usuariomodificado = New cls_usuario_
                If Not obj_usuariomodificado.Buscar(idusuariomodificado) Then
                    obj_usuariomodificado = Nothing
                End If
            End If
            usuariomodificado = obj_usuariomodificado
        End Get
        Set(ByVal value As cls_usuario_)
            obj_usuariomodificado = value
        End Set
    End Property

    Property usuarioregistroestado() As cls_usuario_
        Get
            If IsNothing(obj_usuarioregistroestado) Then
                obj_usuarioregistroestado = New cls_usuario_
                If Not obj_usuarioregistroestado.Buscar(idusuarioregistroestado) Then
                    obj_usuarioregistroestado = Nothing
                End If
            End If
            usuarioregistroestado = obj_usuarioregistroestado
        End Get
        Set(ByVal value As cls_usuario_)
            obj_usuarioregistroestado = value
        End Set
    End Property

    Property registroestado() As cls_registroestado_
        Get
            If IsNothing(obj_registroestado) Then
                obj_registroestado = New cls_registroestado_
                If Not obj_registroestado.Buscar(idregistroestado) Then
                    obj_registroestado = Nothing
                End If
            End If
            registroestado = obj_registroestado
        End Get
        Set(ByVal value As cls_registroestado_)
            obj_registroestado = value
        End Set
    End Property


    Property Items() As Collections.Generic.List(Of cls_registro_)
        Get
            Items = col_Items
        End Get
        Set(ByVal value As Collections.Generic.List(Of cls_registro_))
            col_Items = value
        End Set
    End Property
#End Region

    Private Sub CargarColeccion(ByVal obj_Reader As SqlDataReader)
        col_Items = New Collections.Generic.List(Of cls_registro_)
        While obj_Reader.Read()
            Dim Elemento As New cls_registro_
            Elemento.int_idregistro = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistro")))

            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fechacreado"))) = False Then
                Elemento.dte_fechacreado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fechacreado")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuariocreado"))) = False Then
                Elemento.int_idusuariocreado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuariocreado")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fechamodificado"))) = False Then
                Elemento.dte_fechamodificado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fechamodificado")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuariomodificado"))) = False Then
                Elemento.int_idusuariomodificado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuariomodificado")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fecharegistroestado"))) = False Then
                Elemento.dte_fecharegistroestado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fecharegistroestado")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistroestado"))) = False Then
                Elemento.int_idregistroestado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistroestado")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones"))) = False Then
                Elemento.str_observaciones = (obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuarioregistroestado"))) = False Then
                Elemento.int_idusuarioregistroestado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuarioregistroestado")))
            End If
            col_Items.Add(Elemento)
        End While
    End Sub

    Private Sub CargarVariables(ByVal obj_Reader As SqlDataReader)
        obj_Reader.Read()
        int_idregistro = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistro")))

        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fechacreado"))) = False Then
            dte_fechacreado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fechacreado")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuariocreado"))) = False Then
            int_idusuariocreado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuariocreado")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fechamodificado"))) = False Then
            dte_fechamodificado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fechamodificado")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuariomodificado"))) = False Then
            int_idusuariomodificado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuariomodificado")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("fecharegistroestado"))) = False Then
            dte_fecharegistroestado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("fecharegistroestado")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistroestado"))) = False Then
            int_idregistroestado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idregistroestado")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones"))) = False Then
            str_observaciones = (obj_Reader.GetValue(obj_Reader.GetOrdinal("observaciones")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuarioregistroestado"))) = False Then
            int_idusuarioregistroestado = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idusuarioregistroestado")))
        End If
    End Sub

    Public Function Nuevo(Optional ByVal ObtenerID As Boolean = False) As Boolean
        Nuevo = False
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "registro__Nuevo"
                .Parameters.Add("@fechacreado", SqlDbType.DateTime).Value = dte_fechacreado
                .Parameters.Add("@idusuariocreado", SqlDbType.Int).Value = int_idusuariocreado
                .Parameters.Add("@fechamodificado", SqlDbType.DateTime).Value = dte_fechamodificado
                .Parameters.Add("@idusuariomodificado", SqlDbType.Int).Value = int_idusuariomodificado
                .Parameters.Add("@fecharegistroestado", SqlDbType.DateTime).Value = dte_fecharegistroestado
                .Parameters.Add("@idregistroestado", SqlDbType.Int).Value = int_idregistroestado
                .Parameters.Add("@observaciones", SqlDbType.NVarChar).Value = str_observaciones
                .Parameters.Add("@idusuarioregistroestado", SqlDbType.Int).Value = int_idusuarioregistroestado
                .ExecuteNonQuery()
            End With
            Nuevo = True
            If ObtenerID Then
                CargarUltimo()
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Crear el registro de registro_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Function

    Public Sub Modificar()
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "registro__Modificar"
                .Parameters.Add("@idregistro", SqlDbType.Int).Value = int_idregistro
                .Parameters.Add("@fechacreado", SqlDbType.DateTime).Value = dte_fechacreado
                .Parameters.Add("@idusuariocreado", SqlDbType.Int).Value = int_idusuariocreado
                .Parameters.Add("@fechamodificado", SqlDbType.DateTime).Value = dte_fechamodificado
                .Parameters.Add("@idusuariomodificado", SqlDbType.Int).Value = int_idusuariomodificado
                .Parameters.Add("@fecharegistroestado", SqlDbType.DateTime).Value = dte_fecharegistroestado
                .Parameters.Add("@observaciones", SqlDbType.NVarChar).Value = str_observaciones
                .Parameters.Add("@idregistroestado", SqlDbType.Int).Value = int_idregistroestado
                .Parameters.Add("@idusuarioregistroestado", SqlDbType.Int).Value = int_idusuarioregistroestado
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Modificar el registro de registro_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Sub Eliminar(ByVal idregistro As Integer)
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "registro__Eliminar"
                .Parameters.Add("@idregistro", SqlDbType.Int).Value = idregistro
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Eliminar el registro de registro_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Function Buscar(ByVal idregistro As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            Buscar = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "registro__Buscar"
                .Parameters.Add("@idregistro", SqlDbType.Int).Value = idregistro
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                Buscar = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Buscar el registro de registro_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Sub CargarUltimo()
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "registro__CargarUltimo"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarUltimo registro de registro_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Sub

    Public Function CargarTodos() As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarTodos = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "registro__CargarTodos"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarTodos = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarTodos los registros de registro_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function Clone() As Object Implements System.ICloneable.Clone
        Dim obj_registro_Clon As New cls_registro_
        obj_registro_Clon.int_idregistro = Me.int_idregistro
        obj_registro_Clon.dte_fechacreado = Me.dte_fechacreado
        obj_registro_Clon.int_idusuariocreado = Me.int_idusuariocreado
        obj_registro_Clon.dte_fechamodificado = Me.dte_fechamodificado
        obj_registro_Clon.int_idusuariomodificado = Me.int_idusuariomodificado
        obj_registro_Clon.dte_fecharegistroestado = Me.dte_fecharegistroestado
        obj_registro_Clon.int_idregistroestado = Me.int_idregistroestado
        obj_registro_Clon.str_observaciones = Me.str_observaciones
        obj_registro_Clon.int_idusuarioregistroestado = Me.int_idusuarioregistroestado
        obj_registro_Clon.col_Items = Me.col_Items
        Return obj_registro_Clon
    End Function

End Class
